package com.hb.trade.server.project.section.service.raw;

import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hb.core.pojo.enums.SignupStatusEnum;
import com.hb.core.pojo.parent.PageResult;
import com.hb.core.pojo.project.section.dto.SupplyBidSignupDTO;
import com.hb.core.pojo.project.section.entity.SupplyBidSignup;

import java.util.List;

/**
 * <p>
 * 供应商标段报名表 服务类
 * </p>
 *
 * @author zhaojk
 * @since 2021-08-30
 */
public interface SupplyBidSignupService extends IService<SupplyBidSignup> {

    /**
     * @param supplyBidSignup:
     * @Description: 查询供应商报名列表  跟产品确认 只有公开和需要报名的项目,并且已经发了公告才展示
     * @Author: zhongdl
     * @Date:2021/12/21 16:45
     * @return: {@link PageResult< SupplyBidSignupDTO> }
     **/
    PageResult<SupplyBidSignupDTO> findSupplyBidSignupInfoList(SupplyBidSignupDTO supplyBidSignup);

    /**
     * 根据项目id查询标段的报名信息
     *
     * @param projectId 项目id
     * @return
     */
    List<SupplyBidSignupDTO> findBidSectionSignUpInfo(Long projectId);


    /**
     * 查询我的项目信息
     *
     * @param supplyBidSignup
     * @return
     */
    Page<SupplyBidSignupDTO> findMyProjectList(SupplyBidSignupDTO supplyBidSignup);


    /**
     * 根据标段id查询当前标段下的报名数量
     *
     * @param sectionId
     * @return
     */
    Integer findSectionSignUpCount(Long sectionId);

    /**
     * @param supplyBidSignupDTO:
     * @Description: 招标人查询标段下的所有报名信息
     * @Author: zhongdl
     * @Date:2021/12/21 14:38
     * @return: {@link List< SupplyBidSignupDTO> }
     **/
    List<SupplyBidSignupDTO> getSectionSigupList(SupplyBidSignupDTO supplyBidSignupDTO);

    /**
     * @param supplyBidSignupDTO:
     * @Description: 招标人查询标段下的所有报名信息(带分页)
     * @Author: zhongdl
     * @Date:2021/12/21 14:38
     * @return: {@link List< SupplyBidSignupDTO> }
     **/
    PageResult<SupplyBidSignupDTO> pageSectionSignup(SupplyBidSignupDTO supplyBidSignupDTO);

    /**
     * 根据标段Id与供应商Id查询报名信息详情
     *
     * @param id
     * @return
     */
    SupplyBidSignupDTO getSupplySignupInfo(Long id);

    /**
     * 报名审核修改状态
     *
     * @param supplyBidSignup
     * @return
     */
    Boolean signupExamine(SupplyBidSignup supplyBidSignup);

    /**
     * @param signupStatusEnum:1 已报名 2 未报名/已保存 3 报名未通过 4 报名中
     * @param sectionId:         标段id
     * @Description: 根据标段id查询各个状态的数量
     * @Author: zhongdl
     * @Date:2021/12/21 10:32
     * @return: {@link Long }
     **/
    Long findSignupStatusCount(SignupStatusEnum signupStatusEnum, Long sectionId);


    /**
     * 根据标段Id统计报名数量
     *
     * @param sectionId
     * @return
     */
    SupplyBidSignupDTO getSignupCountBySectionId(Long sectionId);

    /**
     * @param sectionId:
     * @Description: 根据标段id 更新审核通过的报名信息  更改为报名中的状态
     * @Author: zhongdl
     * @Date:2022/1/13 17:16
     * @return: {@link boolean }
     **/
    boolean updateExamineStatus(Long sectionId);

    /**
     * @param orgId:
     * @param bidderId:
     * @param sectionId:
     * @Description: 查看当前企业的标段报名信息
     * @Author: zhongdl
     * @Date:2022/1/28 9:53
     * @return: {@link SupplyBidSignup }
     **/
    SupplyBidSignup getOrgSupplyBidSignupInfo(Long orgId, Long bidderId, Long sectionId);

    /**
     * 导出投标人报名列表信息
     *
     * @param supplyBidSignup
     * @return
     * @author zhaojk
     */
    List<JSONObject> listSectionSignup(SupplyBidSignupDTO supplyBidSignup);

    /**
     * 修改报名表中的投标文件递交状态
     *
     * @param sectionId 标段ID
     * @param orgId     投标用户所在企业ID
     * @param bidderId  投标用户ID
     * @return
     */
    boolean updateTenderFileStatus(Long sectionId, Long orgId, Long bidderId, int status);
}
